{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time, sys\n",
    "\n",
    "# Import the Qiskit \n",
    "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, QiskitError\n",
    "from qiskit import execute, IBMQ, BasicAer, transpiler, Aer\n",
    "from qiskit.providers.ibmq import least_busy\n",
    "from qiskit.tools.monitor import job_monitor\n",
    "from qiskit.mapper import Layout\n",
    "\n",
    "import numpy as np\n",
    "import qiskit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define your backend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Remote backend \"ibmqx_qasm_simulator\" could not be instantiated due to an invalid config: {'local': ['Missing data for required field.'], 'backend_version': ['Missing data for required field.'], 'open_pulse': ['Missing data for required field.'], 'gates': {0: {'qasm_def': ['Missing data for required field.'], 'parameters': ['Missing data for required field.'], 'name': ['Missing data for required field.']}}, 'max_shots': ['Missing data for required field.'], 'memory': ['Missing data for required field.'], 'basis_gates': ['Missing data for required field.'], 'n_qubits': ['Missing data for required field.'], 'backend_name': ['Missing data for required field.'], 'conditional': ['Missing data for required field.']}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Available backends:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<IBMQSimulator('ibmq_qasm_simulator') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_20_tokyo') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_poughkeepsie') from IBMQ(ibm-q-ornl, bes-qis, argonne)>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit import IBMQ\n",
    "\n",
    "# insert your token & URL here\n",
    "IBMQ.enable_account('<token>',\n",
    "                    url='<url>')\n",
    "\n",
    "# check available backends\n",
    "print(\"Available backends:\")\n",
    "IBMQ.backends()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the layout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ibmq_20_tokyo\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "BackendStatus(backend_name='ibmq_20_tokyo', backend_version='1.2.6', operational=True, pending_jobs=0, status_msg='active')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# execute on the IBM Tokyo 20 Qubit Machine\n",
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "backend = IBMQ.get_backend('ibmq_20_tokyo')\n",
    "print(backend)\n",
    "backend.status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the UCCSD ansatz circuit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "def get_ucc_ansatz(theta):\n",
    "    circuit = QuantumCircuit(2, 2)\n",
    "    circuit.x(0)\n",
    "    circuit.ry(theta, 1)\n",
    "    circuit.cx(1, 0)\n",
    "    return circuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the naive measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots1 = 25\n",
    "\n",
    "def measure_zi_simple(theta, ZI_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    ZI_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_iz_simple(theta, IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_simple(theta, XX_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.h(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    XX_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_yy_simple(theta, YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.sdg(0)\n",
    "    circuit.h(1)\n",
    "    circuit.sdg(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs):\n",
    "    measure_zi_simple(theta, ZI_job_IDs)\n",
    "    measure_iz_simple(theta, IZ_job_IDs)\n",
    "    measure_xx_simple(theta, XX_job_IDs)\n",
    "    measure_yy_simple(theta, YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the simultaneous measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots2 = 50\n",
    "\n",
    "def measure_zi_and_iz(theta, ZI_and_IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    ZI_and_IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_and_yy(theta, XX_and_YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.cx(0, 1)\n",
    "    circuit.h(0)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    XX_and_YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs):\n",
    "    measure_zi_and_iz(theta, ZI_and_IZ_job_IDs)\n",
    "    measure_xx_and_yy(theta, XX_and_YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Submit the job to Qiskit and get the job IDs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3.141592653589793\n",
      "5d3a276cda29d900188ab2f1\n",
      "5d3a277035aebf00180b0086\n",
      "5d3a2774512e5300182a101c\n",
      "5d3a2779ee3e7000180cd4e0\n",
      "5d3a277dee3e7000180cd4e2\n",
      "5d3a2781cf4ef70018f2aa78\n",
      "-2.8797932657906435\n",
      "5d3a2785da29d900188ab2f3\n",
      "5d3a2789dc54600019d89c81\n",
      "5d3a278dcf4ef70018f2aa7a\n",
      "5d3a279135aebf00180b0088\n",
      "5d3a2795dc54600019d89c83\n",
      "5d3a27998ffd270018151d94\n",
      "-2.617993877991494\n",
      "5d3a279dee3e7000180cd4e4\n",
      "5d3a27a5512e5300182a101e\n",
      "5d3a27a9cf4ef70018f2aa7c\n",
      "5d3a27ad35aebf00180b008a\n",
      "5d3a27b1baa4500018f8865e\n",
      "5d3a27babaa4500018f88660\n",
      "-2.3561944901923444\n",
      "5d3a27bedc54600019d89c85\n",
      "5d3a27c5baa4500018f88662\n",
      "5d3a27c9f68fb70018990dd3\n",
      "5d3a27cdbaa4500018f88664\n",
      "5d3a27d1f68fb70018990dd5\n",
      "5d3a27d5f68fb70018990dd7\n",
      "-2.094395102393195\n",
      "5d3a27daee3e7000180cd4e6\n",
      "5d3a27de512e5300182a1020\n",
      "5d3a27e235aebf00180b008c\n",
      "5d3a27e68ffd270018151d96\n",
      "5d3a27eabaa4500018f88666\n",
      "5d3a27ee35aebf00180b008e\n",
      "-1.8325957145940452\n",
      "5d3a27f2512e5300182a1022\n",
      "5d3a27f643f0a3001927de24\n",
      "5d3a27facf4ef70018f2aa7e\n",
      "5d3a27fe512e5300182a1024\n",
      "5d3a2802baa4500018f88668\n",
      "5d3a280635aebf00180b0090\n",
      "-1.5707963267948957\n",
      "5d3a280bbaa4500018f8866a\n",
      "5d3a281035aebf00180b0092\n",
      "5d3a2818ee3e7000180cd4e8\n",
      "5d3a281cee3e7000180cd4ea\n",
      "5d3a2820dc54600019d89c87\n",
      "5d3a2824cf4ef70018f2aa80\n",
      "-1.308996938995746\n",
      "5d3a2829f68fb70018990dd9\n",
      "5d3a282ddc54600019d89c89\n",
      "5d3a2832dc54600019d89c8b\n",
      "5d3a283635aebf00180b0094\n",
      "5d3a283b43f0a3001927de26\n",
      "5d3a283fee3e7000180cd4ec\n",
      "-1.0471975511965965\n",
      "5d3a2844cf4ef70018f2aa82\n",
      "5d3a2848dc54600019d89c8d\n",
      "5d3a284cf68fb70018990ddb\n",
      "5d3a2850ee3e7000180cd4ee\n",
      "5d3a28558ffd270018151d98\n",
      "5d3a285a8ffd270018151d9a\n",
      "-0.785398163397447\n",
      "5d3a285e35aebf00180b0096\n",
      "5d3a286435aebf00180b0098\n",
      "5d3a2869dc54600019d89c8f\n",
      "5d3a286d8ffd270018151d9c\n",
      "5d3a2871ee3e7000180cd4f0\n",
      "5d3a2875da29d900188ab2f5\n",
      "-0.5235987755982974\n",
      "5d3a2879512e5300182a1026\n",
      "5d3a287d8ffd270018151d9e\n",
      "5d3a2881cf4ef70018f2aa84\n",
      "5d3a2885cf4ef70018f2aa86\n",
      "5d3a2889ee3e7000180cd4f2\n",
      "5d3a289035aebf00180b009a\n",
      "-0.2617993877991478\n",
      "5d3a2895ee3e7000180cd4f4\n",
      "5d3a2899dc54600019d89c91\n",
      "5d3a289d35aebf00180b009c\n",
      "5d3a28a1f68fb70018990ddd\n",
      "5d3a28a5da29d900188ab2f7\n",
      "5d3a28aada29d900188ab2f9\n",
      "1.7763568394002505e-15\n",
      "5d3a28ae512e5300182a1028\n",
      "5d3a28b4512e5300182a102a\n",
      "5d3a28b78ffd270018151da0\n",
      "5d3a28bcdc54600019d89c93\n",
      "5d3a28c08ffd270018151da2\n",
      "5d3a28c4cf4ef70018f2aa88\n",
      "0.26179938779915135\n",
      "5d3a28c8baa4500018f8866c\n",
      "5d3a28ccee3e7000180cd4f6\n",
      "5d3a28d143f0a3001927de28\n",
      "5d3a28d735aebf00180b009e\n",
      "5d3a28da8ffd270018151da4\n",
      "5d3a28de512e5300182a102c\n",
      "0.5235987755983009\n",
      "5d3a28e243f0a3001927de2a\n",
      "5d3a28e6dc54600019d89c95\n",
      "5d3a28f08ffd270018151da6\n",
      "5d3a28f4cf4ef70018f2aa8a\n",
      "5d3a28f8dc54600019d89c97\n",
      "5d3a28fdda29d900188ab2fb\n",
      "0.7853981633974505\n",
      "5d3a2901ee3e7000180cd4f8\n",
      "5d3a2905baa4500018f8866e\n",
      "5d3a290abaa4500018f88670\n",
      "5d3a290e43f0a3001927de2c\n",
      "5d3a2912da29d900188ab2fd\n",
      "5d3a2917da29d900188ab2ff\n",
      "1.0471975511966\n",
      "5d3a291bbaa4500018f88672\n",
      "5d3a291fbaa4500018f88674\n",
      "5d3a2923dc54600019d89c99\n",
      "5d3a2928dc54600019d89c9b\n",
      "5d3a292cf68fb70018990ddf\n",
      "5d3a293035aebf00180b00a0\n",
      "1.3089969389957492\n",
      "5d3a2935f68fb70018990de1\n",
      "5d3a2939baa4500018f88676\n",
      "5d3a293edc54600019d89c9d\n",
      "5d3a2942ee3e7000180cd4fa\n",
      "5d3a2947f68fb70018990de3\n",
      "5d3a294c43f0a3001927de2e\n",
      "1.5707963267948992\n",
      "5d3a294fda29d900188ab301\n",
      "5d3a2953ee3e7000180cd4fc\n",
      "5d3a2957da29d900188ab303\n",
      "5d3a295f8ffd270018151da8\n",
      "5d3a2964512e5300182a102e\n",
      "5d3a296835aebf00180b00a2\n",
      "1.8325957145940492\n",
      "5d3a296cdc54600019d89c9f\n",
      "5d3a2973ee3e7000180cd4fe\n",
      "5d3a2978baa4500018f88678\n",
      "5d3a297dda29d900188ab305\n",
      "5d3a2983da29d900188ab307\n",
      "5d3a2987baa4500018f8867a\n",
      "2.0943951023931984\n",
      "5d3a298dcf4ef70018f2aa8c\n",
      "5d3a29928ffd270018151daa\n",
      "5d3a299635aebf00180b00a4\n",
      "5d3a299bcf4ef70018f2aa8e\n",
      "5d3a299ecf4ef70018f2aa90\n",
      "5d3a29a2da29d900188ab309\n",
      "2.3561944901923475\n",
      "5d3a29a8512e5300182a1030\n",
      "5d3a29ac8ffd270018151dac\n",
      "5d3a29b0ee3e7000180cd500\n",
      "5d3a29b7da29d900188ab30b\n",
      "5d3a29babaa4500018f8867c\n",
      "5d3a29c1f68fb70018990de5\n",
      "2.6179938779914975\n",
      "5d3a29c6f68fb70018990de7\n",
      "5d3a29cdf68fb70018990de9\n",
      "5d3a29d1baa4500018f8867e\n",
      "5d3a29d543f0a3001927de30\n",
      "5d3a29dbdc54600019d89ca1\n",
      "5d3a29dfda29d900188ab30d\n",
      "2.8797932657906475\n",
      "5d3a29e3512e5300182a1032\n",
      "5d3a29e7512e5300182a1034\n",
      "5d3a29eb35aebf00180b00a6\n",
      "5d3a29f043f0a3001927de32\n",
      "5d3a29f4512e5300182a1036\n",
      "5d3a29fdcf4ef70018f2aa92\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import qiskit\n",
    "\n",
    "ZI_job_IDs = []\n",
    "IZ_job_IDs = []\n",
    "XX_job_IDs = []\n",
    "YY_job_IDs = []\n",
    "\n",
    "ZI_and_IZ_job_IDs = []\n",
    "XX_and_YY_job_IDs = []\n",
    "\n",
    "theta_values = []\n",
    "\n",
    "for theta in np.arange(-np.pi, np.pi, np.pi / 12):\n",
    "    print(theta)\n",
    "    measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs)\n",
    "    measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs)\n",
    "    theta_values.append(theta)\n",
    "print('Done!')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# push job IDs to list for easier processing\n",
    "you will need to do this before closing the computer to make your life easier later on :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZI_job_IDs is :\n",
      "['5d3a276cda29d900188ab2f1', '5d3a2785da29d900188ab2f3', '5d3a279dee3e7000180cd4e4', '5d3a27bedc54600019d89c85', '5d3a27daee3e7000180cd4e6', '5d3a27f2512e5300182a1022', '5d3a280bbaa4500018f8866a', '5d3a2829f68fb70018990dd9', '5d3a2844cf4ef70018f2aa82', '5d3a285e35aebf00180b0096', '5d3a2879512e5300182a1026', '5d3a2895ee3e7000180cd4f4', '5d3a28ae512e5300182a1028', '5d3a28c8baa4500018f8866c', '5d3a28e243f0a3001927de2a', '5d3a2901ee3e7000180cd4f8', '5d3a291bbaa4500018f88672', '5d3a2935f68fb70018990de1', '5d3a294fda29d900188ab301', '5d3a296cdc54600019d89c9f', '5d3a298dcf4ef70018f2aa8c', '5d3a29a8512e5300182a1030', '5d3a29c6f68fb70018990de7', '5d3a29e3512e5300182a1032']\n",
      "\n",
      "IZ_job_IDs is :\n",
      "['5d3a277035aebf00180b0086', '5d3a2789dc54600019d89c81', '5d3a27a5512e5300182a101e', '5d3a27c5baa4500018f88662', '5d3a27de512e5300182a1020', '5d3a27f643f0a3001927de24', '5d3a281035aebf00180b0092', '5d3a282ddc54600019d89c89', '5d3a2848dc54600019d89c8d', '5d3a286435aebf00180b0098', '5d3a287d8ffd270018151d9e', '5d3a2899dc54600019d89c91', '5d3a28b4512e5300182a102a', '5d3a28ccee3e7000180cd4f6', '5d3a28e6dc54600019d89c95', '5d3a2905baa4500018f8866e', '5d3a291fbaa4500018f88674', '5d3a2939baa4500018f88676', '5d3a2953ee3e7000180cd4fc', '5d3a2973ee3e7000180cd4fe', '5d3a29928ffd270018151daa', '5d3a29ac8ffd270018151dac', '5d3a29cdf68fb70018990de9', '5d3a29e7512e5300182a1034']\n",
      "\n",
      "XX_job_IDs is :\n",
      "['5d3a2774512e5300182a101c', '5d3a278dcf4ef70018f2aa7a', '5d3a27a9cf4ef70018f2aa7c', '5d3a27c9f68fb70018990dd3', '5d3a27e235aebf00180b008c', '5d3a27facf4ef70018f2aa7e', '5d3a2818ee3e7000180cd4e8', '5d3a2832dc54600019d89c8b', '5d3a284cf68fb70018990ddb', '5d3a2869dc54600019d89c8f', '5d3a2881cf4ef70018f2aa84', '5d3a289d35aebf00180b009c', '5d3a28b78ffd270018151da0', '5d3a28d143f0a3001927de28', '5d3a28f08ffd270018151da6', '5d3a290abaa4500018f88670', '5d3a2923dc54600019d89c99', '5d3a293edc54600019d89c9d', '5d3a2957da29d900188ab303', '5d3a2978baa4500018f88678', '5d3a299635aebf00180b00a4', '5d3a29b0ee3e7000180cd500', '5d3a29d1baa4500018f8867e', '5d3a29eb35aebf00180b00a6']\n",
      "\n",
      "YY_job_IDs is :\n",
      "['5d3a2779ee3e7000180cd4e0', '5d3a279135aebf00180b0088', '5d3a27ad35aebf00180b008a', '5d3a27cdbaa4500018f88664', '5d3a27e68ffd270018151d96', '5d3a27fe512e5300182a1024', '5d3a281cee3e7000180cd4ea', '5d3a283635aebf00180b0094', '5d3a2850ee3e7000180cd4ee', '5d3a286d8ffd270018151d9c', '5d3a2885cf4ef70018f2aa86', '5d3a28a1f68fb70018990ddd', '5d3a28bcdc54600019d89c93', '5d3a28d735aebf00180b009e', '5d3a28f4cf4ef70018f2aa8a', '5d3a290e43f0a3001927de2c', '5d3a2928dc54600019d89c9b', '5d3a2942ee3e7000180cd4fa', '5d3a295f8ffd270018151da8', '5d3a297dda29d900188ab305', '5d3a299bcf4ef70018f2aa8e', '5d3a29b7da29d900188ab30b', '5d3a29d543f0a3001927de30', '5d3a29f043f0a3001927de32']\n",
      "\n",
      "ZI_and_IZ_job_IDs is :\n",
      "['5d3a277dee3e7000180cd4e2', '5d3a2795dc54600019d89c83', '5d3a27b1baa4500018f8865e', '5d3a27d1f68fb70018990dd5', '5d3a27eabaa4500018f88666', '5d3a2802baa4500018f88668', '5d3a2820dc54600019d89c87', '5d3a283b43f0a3001927de26', '5d3a28558ffd270018151d98', '5d3a2871ee3e7000180cd4f0', '5d3a2889ee3e7000180cd4f2', '5d3a28a5da29d900188ab2f7', '5d3a28c08ffd270018151da2', '5d3a28da8ffd270018151da4', '5d3a28f8dc54600019d89c97', '5d3a2912da29d900188ab2fd', '5d3a292cf68fb70018990ddf', '5d3a2947f68fb70018990de3', '5d3a2964512e5300182a102e', '5d3a2983da29d900188ab307', '5d3a299ecf4ef70018f2aa90', '5d3a29babaa4500018f8867c', '5d3a29dbdc54600019d89ca1', '5d3a29f4512e5300182a1036']\n",
      "\n",
      "XX_and_YY_job_IDs is :\n",
      "['5d3a2781cf4ef70018f2aa78', '5d3a27998ffd270018151d94', '5d3a27babaa4500018f88660', '5d3a27d5f68fb70018990dd7', '5d3a27ee35aebf00180b008e', '5d3a280635aebf00180b0090', '5d3a2824cf4ef70018f2aa80', '5d3a283fee3e7000180cd4ec', '5d3a285a8ffd270018151d9a', '5d3a2875da29d900188ab2f5', '5d3a289035aebf00180b009a', '5d3a28aada29d900188ab2f9', '5d3a28c4cf4ef70018f2aa88', '5d3a28de512e5300182a102c', '5d3a28fdda29d900188ab2fb', '5d3a2917da29d900188ab2ff', '5d3a293035aebf00180b00a0', '5d3a294c43f0a3001927de2e', '5d3a296835aebf00180b00a2', '5d3a2987baa4500018f8867a', '5d3a29a2da29d900188ab309', '5d3a29c1f68fb70018990de5', '5d3a29dfda29d900188ab30d', '5d3a29fdcf4ef70018f2aa92']\n",
      "\n",
      "theta values are\n",
      "[-3.141592653589793, -2.8797932657906435, -2.617993877991494, -2.3561944901923444, -2.094395102393195, -1.8325957145940452, -1.5707963267948957, -1.308996938995746, -1.0471975511965965, -0.785398163397447, -0.5235987755982974, -0.2617993877991478, 1.7763568394002505e-15, 0.26179938779915135, 0.5235987755983009, 0.7853981633974505, 1.0471975511966, 1.3089969389957492, 1.5707963267948992, 1.8325957145940492, 2.0943951023931984, 2.3561944901923475, 2.6179938779914975, 2.8797932657906475]\n"
     ]
    }
   ],
   "source": [
    "print('ZI_job_IDs is = ')\n",
    "print(ZI_job_IDs)\n",
    "print()\n",
    "\n",
    "print('IZ_job_IDs is = ')\n",
    "print(IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_job_IDs is = ')\n",
    "print(XX_job_IDs)\n",
    "print()\n",
    "\n",
    "print('YY_job_IDs = ')\n",
    "print(YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('ZI_and_IZ_job_IDs = ')\n",
    "print(ZI_and_IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_and_YY_job_IDs = :')\n",
    "print(XX_and_YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('theta_values = ')\n",
    "print(theta_values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### (Check the status of the specific job)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<JobStatus.DONE: 'job has successfully run'>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "backend.retrieve_job('').status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retyping the job IDs\n",
    "just copy and paste from the print statement results in the previous block that shows the list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "ZI_job_IDs = []\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retrieve the job results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for naive measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.7148\n",
      "12.138\n",
      "12.1076\n",
      "11.9204\n",
      "10.448\n",
      "9.8004\n",
      "9.624\n",
      "7.6268\n",
      "5.274000000000001\n",
      "3.8428000000000013\n",
      "1.8348000000000018\n",
      "0.7984000000000007\n",
      "-0.25479999999999914\n",
      "-1.1315999999999988\n",
      "-1.0708000000000002\n",
      "-0.7895999999999994\n",
      "-1.1356000000000002\n",
      "1.2499999999999996\n",
      "1.992400000000001\n",
      "3.846800000000001\n",
      "5.7216000000000005\n",
      "6.9536\n",
      "9.4132\n",
      "10.901200000000003\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('')\n",
    "shots1 = 25\n",
    "final_result_naive = []\n",
    "for i in range (len(theta_values)):\n",
    "    \n",
    "    zi_counts = backend.retrieve_job(ZI_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_counts.get('00', 0) + zi_counts.get('10', 0) \n",
    "                       - zi_counts.get('11', 0) - zi_counts.get('01', 0)) / shots1\n",
    "    #print(zi_counts)\n",
    "    #print(zi_counts.get('10', 0))\n",
    "    #print(zi_contribution)\n",
    "    \n",
    "    iz_counts = backend.retrieve_job(IZ_job_IDs[i]).result().get_counts()\n",
    "    iz_contribution = (iz_counts.get('00', 0) + iz_counts.get('01', 0) \n",
    "                       - iz_counts.get('10', 0) - iz_counts.get('11', 0)) / shots1\n",
    "    \n",
    "    xx_counts = backend.retrieve_job(XX_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_counts.get('00', 0) + xx_counts.get('11', 0) \n",
    "                       - xx_counts.get('01', 0) - xx_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    yy_counts = backend.retrieve_job(YY_job_IDs[i]).result().get_counts()\n",
    "    yy_contribution = (yy_counts.get('00', 0) + yy_counts.get('11', 0) \n",
    "                       - yy_counts.get('01', 0) - yy_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_naive.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for simultaneous measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.497608000000001\n",
      "11.616200000000001\n",
      "11.88044\n",
      "11.21974\n",
      "11.486404\n",
      "9.949722000000001\n",
      "9.228010000000001\n",
      "7.436040000000002\n",
      "5.8725200000000015\n",
      "3.6337960000000002\n",
      "2.4998400000000007\n",
      "0.9269600000000018\n",
      "-0.11220999999999971\n",
      "-1.1195680000000001\n",
      "-0.7141519999999991\n",
      "-1.4844799999999991\n",
      "-0.2040200000000001\n",
      "0.5369399999999998\n",
      "2.8495600000000003\n",
      "3.33702\n",
      "4.4882800000000005\n",
      "7.845826\n",
      "8.968991999999998\n",
      "10.12722\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "shots2 = 50\n",
    "\n",
    "final_result_simultaneous = []\n",
    "for i in range (len(theta_values)):\n",
    "    zi_and_iz_counts = backend.retrieve_job(ZI_and_IZ_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('10', 0) \n",
    "                       - zi_and_iz_counts.get('11', 0) - zi_and_iz_counts.get('01', 0)) / shots2\n",
    "    iz_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('01', 0) \n",
    "                       - zi_and_iz_counts.get('10', 0) - zi_and_iz_counts.get('11', 0)) / shots2\n",
    "    #print(zi_and_iz_counts)\n",
    "    xx_and_yy_counts = backend.retrieve_job(XX_and_YY_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('10', 0) \n",
    "                       - xx_and_yy_counts.get('11', 0) - xx_and_yy_counts.get('01', 0)) / shots2\n",
    "    zz_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('01', 0) \n",
    "                       - xx_and_yy_counts.get('10', 0) - xx_and_yy_counts.get('11', 0)) / shots2\n",
    "    yy_contribution = -xx_contribution * zz_contribution\n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_simultaneous.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Superimpose naive vs. simultaneous results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(theta_values, final_result_naive, 'g^', label = \"naive measurement\")\n",
    "plt.plot(theta_values, final_result_naive)\n",
    "plt.plot(theta_values, final_result_simultaneous, 'bs', label = \"simultaneous measurement\")\n",
    "plt.plot(theta_values, final_result_simultaneous)\n",
    "plt.legend(loc='best')\n",
    "plt.xlabel('theta values')\n",
    "plt.ylabel('energy sums')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compute and plot the difference from theory (many shots running on simulator)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "values_theory = [12.191751999999997, 13.15524, 13.462224, 13.381992, 12.837567999999997, 11.637923999999998, 10.217920000000001, 8.380472000000001, 6.38668, 4.4392, 2.5525520000000013, 0.8814480000000007, -0.42213999999999907, -1.3090319999999995, -1.7176839999999993, -1.5886079999999994, -0.9050319999999998, 0.2661680000000004, 1.5365760000000002, 3.4022159999999992, 5.413296000000001, 7.372232, 9.278692, 10.918935999999999]\n",
    "value_diff, value2_diff = [], []\n",
    "for theta in range(len(theta_values)):\n",
    "    value_diff.append(abs(final_result_naive[theta] - values_theory[theta]))\n",
    "    value2_diff.append(abs(final_result_simultaneous[theta] - values_theory[theta]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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zTPPPMNBBx20STmjRo0CYO7cuYwbN46xY8dy7LHH0tra2rMga5STQw1qbu7aeLN69uc//5lzzz2Xp59+mu2224677rqL97///Tz22GM88cQT7LPPPtx8882bvGfvvfemra2NF198EYAZM2ZwyimnsHbtWj7zmc8wc+ZM5s6dyxlnnMFnP/vZSixWxblZqQb15WG4WbUbMWIEY8aMAWDs2LEsWrSIp556issvv5yVK1eyevVqjj322IL3fehDH2LGjBlceumlzJgxgxkzZvDss8/y1FNPcfTRRwOwfv16hg4d2qfLUy2cHMyspm2++eYb/+/fvz9vvvkmkyZN4u6772b06NFMmzaNBx98sOB9p5xyCieffDLvf//7kcSee+7Jk08+yciRI5k9e3YfLkF1crOSmdWd119/naFDh7J27VqmT59edJ499tiD/v37M3XqVE455RQA9tprL5YvX74xOaxdu5anny54ikBD8JGDmWWuubn01UpZmDp1KgcffDCDBw/m4IMP5vXXXy863ymnnMKUKVM2nnsYMGAAM2fO5LzzzmPVqlWsW7eOCy64gJEjR2YTaBVTrfVz19LSEn7Yj1nlLVy4kH322afSYVgRxb4bSXMjoqXcMtysZGZmBZwczMysgJODmZkVcHIwM7MCTg5mZlbAycHMzAo4OZhZ3TjzzDNZsGBBr5Q1fPhwXn31VVauXMm1117bK2XWEieHatHaCuPGueMkq28Z1/ObbrqJfffdt1fLdHKwypo6FR56KPlrVq96sZ7/4x//4IQTTmD06NHst99+zJgxg/Hjx9N+k+zWW2/NlClTGDlyJEcddRSPPvoo48ePZ/fdd+eee+4BYNq0aXz605/eWOaJJ55Y0A/TpZdeyvPPP8+YMWOYMmUKq1ev5sgjj+SAAw5g1KhR/PSnPwVKdx8O8PzzzzNhwgTGjh3LYYcdxjPPPLPxPUcccQTvete7OPLII/nLX/4CwKRJk5g5c+bGGLbeemsAWltbOfzwwxkzZgz77bcfv/vd73q8HkuKiJp6jR07NurOyy9HDBwYARFbbBHR2lrpiMw6tWDBgq69oZfr+cyZM+PMM8/cOLxy5coYN25cPPbYYxERAcR9990XEREnnXRSHH300dHW1hbz58+P0aNHR0TErbfeGueee+7GMk444YR44IEHIiJit912i+XLl8eLL74Y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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(theta_values, value_diff, 'bs', label='naive')\n",
    "plt.plot(theta_values, value2_diff, 'r^', label='simultaneous')\n",
    "plt.xlabel('theta values')\n",
    "plt.ylabel('energy sums')\n",
    "plt.title('difference between simultaneous and naive for simulator')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(['hi' for v1, v2 in zip(value_diff, value2_diff) if v1 > v2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.179623999999983\n"
     ]
    }
   ],
   "source": [
    "print(sum(value_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.82575999999999\n"
     ]
    }
   ],
   "source": [
    "print(sum(value2_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
